package com.luo.service.content;

import com.luo.pojo.Article;
import com.luo.pojo.ArticleTag;
import com.luo.pojo.Category;
import com.luo.pojo.Tag;
import org.elasticsearch.rest.RestStatus;

import java.util.List;
import java.util.Map;

/**
 * @author Luo
 */
public interface ContentService {

    public static final String ES_DOCUMENT="luoqianyi_blog";
    /**
     * 添加文章
     * @param article 文章对象
     */
    void addArticle(Article article);

    /**
     * 根据编号删除文章
     * @param aid 文章id
     */
    void deleteArticleById(Integer aid);

    /**
     * 更新文章
     * @param article 文章对象
     */
    void updateArticleById(Article article);

    /**
     * 更新分类
     *
     * @param ordinal
     * @param newCategory
     */
    void updateCategory(String ordinal, String newCategory);


    /**
     * 添加文章点击量
     *
     * @param article
     */
    void updateContentByCid(Article article);

    /**
     * 根据编号获取文章
     *
     * @param aid 文章id
     * @return 文章对象
     */
    Article getArticleById(Integer aid);

    /**
     * 获取所有文章
     *
     * @return 文章列表
     */
    List<Article> getAllArticle();

    /**
     * 获取每篇文章id对应的所有标签
     * @param aid 文章id
     * @return 标签数组
     */
    String[] getArticleTags(Integer aid);

    /**
     *  获取标签
     * @return 标签数组
     */
    List<String> queryTag();

    /**
     * 获取对应标签的文章列表
     * @param tag 标签名
     * @return 文章列表
     */
    List<Article> queryTagArticles(String tag);

    /**
     * 获取分组日期
     * @return 年月日数组
     */
    String[] queryDate();

    /**
     * 查询所有分类
     * @return 类型列表
     */
    String[] queryCategories();

    /**
     * 查询每个分类下的文章
     * @param category 分类名
     * @return 文章列表
     */
    List<Article> queryCateArticles(String category);

    String getCategory(int aid);

    List<Tag> selectTagsById();

    int deleteTag(Integer tid);

    int updateTag(Integer tid,String tag);

    List<Tag> getTagsByTag(String tag);

    int insertTag(String tag);

    /**
     * 删除cate
     */
    int deleteCate(Integer cid);
    /**
     * 更新cate
     */
    int updateCate(Integer cid,String cate);
    /**
     * 模糊查询cate
     */
    List<Category> getCateByCate(String cate);
    /**
     * 插入分类
     */
    int insertCate(String cate);

    List<Category> selectCateById();

    /**
     * 新增文章
     */
    int insertArticle(Integer cid,String title,Integer isPublish,Integer readTime,String discribe,Integer recommed,String content);
    /**
     * 绑定标签
     */
    int bindArticleAndTag(List<ArticleTag> articleTagList);
    /**
     * 通过标题获取文章
     */
    Article getArticleByTitle(String title);

    /**
     * 缓存浏览量
     */
    String saveViews(String route);


    /**
     * 根据aid更新文章浏览量
     */
    int addArticleViews(int aid,int add_count);

    /**
     * 将数据库中的Articles表里的相关字段存入ES
     */
    Boolean putArticleIntoES();

    /**
     * 用户模糊查询ES的数据，获取相应文章
     */
    List<Map<String,Object>> searchArticleByES(String keyword);

    /**
     * 后台对文章进行增删改操作，同步修改ES里的数据
     */
    //改
    RestStatus updateArticleES(Article article);
    //增
    RestStatus insertArticleES(Article article);
    //删
    RestStatus deleteArticleES(Integer aid);

    /**
     * 将文章增加到rs里
     */
    Boolean insertArticleRS(Article article);

    /**
     * 删除跟文章相关的redis缓存
     */
    void delAboutArticlesCache();
}